home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / Musique / Quod Libet / quodlibet-3.3.0-installer.exe / bin / quodlibet / cli.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2014-12-31  |  8KB  |  264 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.7)
  3.  
  4. import os
  5. import sys
  6. from quodlibet.util.dprint import print_, print_e
  7. from quodlibet.remote import Remote, RemoteError
  8.  
  9. def exit_(status = None, notify_startup = False):
  10.     '''Call this to abort the startup before any mainloop starts.
  11.  
  12.     notify_startup needs to be true if QL could potentially have been
  13.     called from the desktop file.
  14.     '''
  15.     if notify_startup:
  16.         Gdk = Gdk
  17.         import gi.repository
  18.         Gdk.notify_startup_complete()
  19.     raise SystemExit(status)
  20.  
  21.  
  22. def is_running():
  23.     '''If maybe is another instance running'''
  24.     return Remote.remote_exists()
  25.  
  26.  
  27. def control(command, arg = None, ignore_error = False):
  28.     '''Sends command to the existing instance if possible and exits.
  29.  
  30.     Will print any response it gets to stdout.
  31.  
  32.     Does not return except if ignore_error is True and sending
  33.     the command failed.
  34.     '''
  35.     if not is_running():
  36.         if ignore_error:
  37.             return None
  38.         None(_('Quod Libet is not running.'), notify_startup = True)
  39.         return None
  40.     message = None
  41.     if arg is not None:
  42.         message += ' ' + arg
  43.     
  44.     try:
  45.         response = Remote.send_message(message)
  46.     except RemoteError:
  47.         e = None
  48.         if ignore_error:
  49.             return None
  50.         None(str(e), notify_startup = True)
  51.  
  52.     if response is not None:
  53.         print_(response, end = '')
  54.     exit_(notify_startup = True)
  55.  
  56.  
  57. def process_arguments():
  58.     URI = URI
  59.     import quodlibet.util.uri
  60.     util = util
  61.     import quodlibet
  62.     const = const
  63.     import quodlibet
  64.     actions = []
  65.     controls = [
  66.         'next',
  67.         'previous',
  68.         'play',
  69.         'pause',
  70.         'play-pause',
  71.         'stop',
  72.         'hide-window',
  73.         'show-window',
  74.         'toggle-window',
  75.         'focus',
  76.         'quit',
  77.         'unfilter',
  78.         'refresh',
  79.         'force-previous']
  80.     controls_opt = [
  81.         'seek',
  82.         'order',
  83.         'repeat',
  84.         'query',
  85.         'volume',
  86.         'filter',
  87.         'set-rating',
  88.         'set-browser',
  89.         'open-browser',
  90.         'random',
  91.         'song-list',
  92.         'queue']
  93.     options = util.OptionParser('Quod Libet', const.VERSION, _('a music library and player'), _('[option]'))
  94.     options.add('print-playing', help = _('Print the playing song and exit'))
  95.     options.add('start-playing', help = _('Begin playing immediately'))
  96.     for opt, help in [
  97.         ('next', _('Jump to next song')),
  98.         ('previous', _('Jump to previous song or restart if near the beginning')),
  99.         ('force-previous', _('Jump to previous song')),
  100.         ('play', _('Start playback')),
  101.         ('pause', _('Pause playback')),
  102.         ('play-pause', _('Toggle play/pause mode')),
  103.         ('stop', _('Stop playback')),
  104.         ('volume-up', _('Turn up volume')),
  105.         ('volume-down', _('Turn down volume')),
  106.         ('status', _('Print player status')),
  107.         ('hide-window', _('Hide main window')),
  108.         ('show-window', _('Show main window')),
  109.         ('toggle-window', _('Toggle main window visibility')),
  110.         ('focus', _('Focus the running player')),
  111.         ('unfilter', _('Remove active browser filters')),
  112.         ('refresh', _('Refresh and rescan library')),
  113.         ('list-browsers', _('List available browsers')),
  114.         ('print-playlist', _('Print the current playlist')),
  115.         ('print-queue', _('Print the contents of the queue')),
  116.         ('no-plugins', _('Start without plugins')),
  117.         ('quit', _('Exit Quod Libet'))]:
  118.         options.add(opt, help = help)
  119.     
  120.     for opt, help, arg in [
  121.         ('seek', _('Seek within the playing song'), _('[+|-][HH:]MM:SS')),
  122.         ('order', _('Set or toggle the playback order'), '[order]|toggle'),
  123.         ('repeat', _('Turn repeat off, on, or toggle it'), '0|1|t'),
  124.         ('volume', _('Set the volume'), '(+|-|)0..100'),
  125.         ('query', _('Search your audio library'), _('query')),
  126.         ('play-file', _('Play a file'), Q_('command|filename')),
  127.         ('set-rating', _('Rate the playing song'), '0.0..1.0'),
  128.         ('set-browser', _('Set the current browser'), 'BrowserName'),
  129.         ('open-browser', _('Open a new browser'), 'BrowserName'),
  130.         ('queue', _('Show or hide the queue'), 'on|off|t'),
  131.         ('song-list', _('Show or hide the main song list'), 'on|off|t'),
  132.         ('random', _('Filter on a random value'), Q_('command|tag')),
  133.         ('filter', _('Filter on a tag value'), _('tag=value')),
  134.         ('enqueue', _('Enqueue a file or query'), '%s|%s' % (Q_('command|filename'), _('query'))),
  135.         ('enqueue-files', _('Enqueue comma-separated files'), '%s[,%s..]' % (_('filename'), _('filename'))),
  136.         ('print-query', _('Print filenames of results of query to stdout'), _('query')),
  137.         ('unqueue', _('Unqueue a file or query'), '%s|%s' % (Q_('command|filename'), _('query')))]:
  138.         options.add(opt, help = help, arg = arg)
  139.     
  140.     options.add('sm-config-prefix', arg = 'dummy')
  141.     options.add('sm-client-id', arg = 'prefix')
  142.     options.add('screen', arg = 'dummy')
  143.     
  144.     def is_vol(str):
  145.         if str[0] in '+-':
  146.             if len(str) == 1:
  147.                 return True
  148.             str = None[1:]
  149.         return str.isdigit()
  150.  
  151.     
  152.     def is_time(str):
  153.         if str[0] not in '+-0123456789':
  154.             return False
  155.         if None[0] in '+-':
  156.             str = str[1:]
  157.         parts = str.split(':')
  158.         if len(parts) > 3:
  159.             return False
  160.         return None not in [ p.isdigit() for p in parts ]
  161.  
  162.     
  163.     def is_float(str):
  164.         
  165.         try:
  166.             float(str)
  167.         except ValueError:
  168.             return False
  169.  
  170.         return True
  171.  
  172.     validators = {
  173.         'order': [
  174.             '0',
  175.             '1',
  176.             't',
  177.             'toggle',
  178.             'inorder',
  179.             'shuffle',
  180.             'weighted',
  181.             'onesong'].__contains__,
  182.         'repeat': [
  183.             '0',
  184.             '1',
  185.             't',
  186.             'on',
  187.             'off',
  188.             'toggle'].__contains__,
  189.         'volume': is_vol,
  190.         'seek': is_time,
  191.         'set-rating': is_float }
  192.     (opts, args) = options.parse()
  193.     for command, arg in opts.items():
  194.         if command in controls:
  195.             control(command)
  196.             continue
  197.         if command in controls_opt:
  198.             if command in validators and not validators[command](arg):
  199.                 print_e(_("Invalid argument for '%s'.") % command)
  200.                 print_e(_('Try %s --help.') % sys.argv[0])
  201.                 exit_(True, notify_startup = True)
  202.             else:
  203.                 control(command, arg)
  204.         if command == 'status':
  205.             control('status')
  206.             continue
  207.         if command == 'print-playlist':
  208.             control('dump-playlist')
  209.             continue
  210.         if command == 'print-queue':
  211.             control('dump-queue')
  212.             continue
  213.         if command == 'list-browsers':
  214.             control('dump-browsers')
  215.             continue
  216.         if command == 'volume-up':
  217.             control('volume +')
  218.             continue
  219.         if command == 'volume-down':
  220.             control('volume -')
  221.             continue
  222.         if command == 'enqueue' or command == 'unqueue':
  223.             
  224.             try:
  225.                 filename = URI(arg).filename
  226.             except ValueError:
  227.                 filename = arg
  228.  
  229.             control(command, filename)
  230.             continue
  231.         if command == 'enqueue-files':
  232.             control(command, arg)
  233.             continue
  234.         if command == 'play-file':
  235.             
  236.             try:
  237.                 filename = URI(arg).filename
  238.             except ValueError:
  239.                 filename = os.path.abspath(util.path.expanduser(arg))
  240.  
  241.             if os.path.isdir(filename):
  242.                 control('add-directory', filename)
  243.             else:
  244.                 control('add-file', filename)
  245.         if command == 'print-playing':
  246.             
  247.             try:
  248.                 control('print-playing', args[0])
  249.             except IndexError:
  250.                 control('print-playing')
  251.             
  252.  
  253.         if command == 'print-query':
  254.             control(command, arg)
  255.             continue
  256.         if command == 'start-playing':
  257.             actions.append(command)
  258.             continue
  259.         if command == 'no-plugins':
  260.             actions.append(command)
  261.             continue
  262.     return actions
  263.  
  264.